// 函数作为值

// 函数名在js中就是变量。所以可以在任何可以使用变量的地方，这就意味着，不仅可以把函数作为参数传递给另一个函数，还可以在一个函数中返回另一个函数

function callSomeFunction(someFunction, someArgument) {
    return someFunction(someArgument)
}

// 这个函数接收两个参数。第一个参数应该是一个函数，第二个参数应该是要传给这个函数的值。任
// 何函数都可以像下面这样作为参数传递：
function add10(num) {
    return num + 10
}

let result1 = callSomeFunction(add10, 10)
console.log(result1)

function getGreeting(name) {
    return 'hello, '  +  name
}

let result2 = callSomeFunction(getGreeting, 'Nicholas')
console.log(result2)


// 对象数组sort
function createComparisonFunction(propertyName) {
    return function(object1, object2) {
        let values1 = object1[propertyName]
        let values2 = object2[propertyName]
        console.log(object1,object2)
        if (values1 < values2) {
            return -1
        } else if (values1 < values2) {
            return 1
        } else {
            return 0
        }
    }
}

let data = [
    {name: "Zachary", age: 28},
    {name: "Nicholas", age: 29}
   ];

   data.sort(createComparisonFunction("name"));
   console.log(data[0].name); // Nicholas 